/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.upc.proyecto.web;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import org.omg.CORBA.Request;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionAttributeStore;
import org.springframework.web.servlet.ModelAndView;
import pe.edu.upc.proyecto.dao.DistritoDao;
import pe.edu.upc.proyecto.dao.InmuebleDao;
import pe.edu.upc.proyecto.dao.UsuariosDao;
import pe.edu.upc.proyecto.domain.Inmueble;
import pe.edu.upc.proyecto.domain.Usuarios;
import pe.edu.upc.proyecto.service.UsuariosService;

@Controller
public class InmuebleController {

    @Autowired
    DistritoDao distritos;
    @Autowired
    InmuebleDao inmuebles;
    @Autowired
    UsuariosService usuarios;

    @RequestMapping(value = "/proyectos.jsp", method = RequestMethod.GET)
    public ModelAndView projects() {
        ModelAndView mav = new ModelAndView("projects");
        mav.addObject("inmuebles", inmuebles.obtenerInmuebles());
        return mav;
    }

    @RequestMapping("/BuscarInmueble.jsp")
    public ModelAndView search() {
        ModelAndView mav = new ModelAndView("search");
        mav.addObject("distritos", distritos.obtenerDistritos());
        mav.addObject("inmuebles", inmuebles.obtenerInmuebles());
        return mav;
    }

    // Listar Inmuebles
    @RequestMapping("/proyectos_corredor.jsp")
    public ModelAndView listinmueble(Integer intero) { 
        ModelAndView mav = new ModelAndView("listinmueble");
        mav.addObject("inmuebles", inmuebles.obtenerInmuebles());
        //mav.addObject("inmuebles", inmuebles.obtenerInmueblecorredor(1));
        return mav;
    }


    // Listar Inmuebles
    @RequestMapping( value="/proyectos_corredor.jsp",method = RequestMethod.POST)
    public ModelAndView listinmuebleLogin(
            @RequestParam("tipo") String tipo,
            @RequestParam("email") String email,
            @RequestParam("clave") String clave,
            HttpSession session
            ) {

        ModelAndView mav;
        Object object = usuarios.autenticar(email, clave);
        if(object instanceof Usuarios){
            if(tipo.equals("corredor")){
                mav = new ModelAndView("listinmueble");
                mav.addObject("inmuebles", inmuebles.obtenerInmuebles());
            }else{
                mav = new ModelAndView("bienvenida");
            }
            session.setAttribute("usuario", object);
            mav.addObject("usuario",object);
        }else{
            mav = new ModelAndView("login");
            mav.addObject("error", true );
        }

        return mav;
    }
    
    // Nuevo Inmueble
    @RequestMapping(value = "/registrar_inmueble.jsp", method = RequestMethod.GET)
    public ModelAndView newinmueble() {
        Inmueble inmueble = new Inmueble();
         System.out.println("Nuevo");
        ModelAndView mav = new ModelAndView("newinmueble");
        mav.addObject("distritos", distritos.obtenerDistritos());
        mav.addObject("inmueble", inmueble);
        return mav;
    }

    // Registrar inmueble
    @RequestMapping(value = "/registrar_inmueble.jsp", method = RequestMethod.POST)
    public String registrarinmueble(@Valid Inmueble inmueble,
            @RequestParam("distrito") Integer distrito, @RequestParam("corredor") Integer corredor,
            @RequestParam("cliente") Integer cliente, @RequestParam("precioVenta") Double precioVenta) {
        ModelAndView mav = new ModelAndView("registrarinmueble");
         System.out.println("Guardar");
        inmueble.setCliente(cliente);
        inmueble.setCorredor(corredor);
        inmueble.setDistrito(distrito);
        inmueble.setPrecioVenta(precioVenta);
        inmueble.setEstado("A");
        inmuebles.grabarInmueble(inmueble);
        return "redirect:/proyectos_corredor.jsp";
    }

    // Recuperar inmueble
    @RequestMapping(value = "/{codigo}/registrar_inmueble.jsp", method = RequestMethod.GET)
    public String updateinmueble(@PathVariable("codigo") Long codigo, ModelMap modelMap) {
        if (codigo == null) {
            throw new IllegalArgumentException("An Identifier is required");
        }
        Inmueble inmueble = inmuebles.obtenerInmueble(codigo.intValue());
        modelMap.put("distritos", distritos.obtenerDistritos());
        modelMap.put("inmueble", inmueble);
        return "registrar_inmueble";
    }

    // Editar inmueble
    @RequestMapping(value = "/{codigo}/registrar_inmueble.jsp", method = RequestMethod.POST)
    public String modificar(@Valid Inmueble inmueble, BindingResult result, ModelMap modelMap,
            @RequestParam("distrito") Integer distrito, @RequestParam("corredor") Integer corredor,
            @RequestParam("cliente") Integer cliente, @RequestParam("precioVenta") Double precioVenta) {
//        System.out.println("Editar");
        inmueble.setCliente(cliente);
        inmueble.setCorredor(corredor);
        inmueble.setDistrito(distrito);
        inmueble.setPrecioVenta(precioVenta);
        inmueble.setEstado("A");
        inmuebles.grabarInmueble(inmueble);
        return "redirect:/proyectos_corredor.jsp";
    }



}

